package com.webserver.core;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * WebServer的主类
 * WebServer是一个Web容器,模拟Tomcat的基础功能
 * Web容器主要有两个任务:
 * 1:管理部署在容器中的所有的网络应用(webapp),每个网络应用俗称"网站"
 * 2:负责与客户端(通常是浏览器)完成TCP链接,并基于HTTP协议进行交互,使得客户端可以通过网络远程调用服务器中的某个资源
 */
public class WebServerApplication {
    private ServerSocket serverSocket;
    private ExecutorService threadPool;//线程池
    public WebServerApplication(){
        try {
            System.out.println("服务器正在启动...");
            serverSocket = new ServerSocket(8088);
            //准备一个固定容量为50的线程池
            threadPool = Executors.newFixedThreadPool(50);
            System.out.println("服务器启动完毕!!!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void start(){
        //crtl+alt+T 选择 try catch
        try {
            while (true) {
                System.out.println("等待客户端链接...");
                Socket socket = serverSocket.accept();
                System.out.println("一个客户端链接了!!");
                //启动一个线程,并将本次与客户端关联的socket传过去,负责与客户端进行交互
                ClientHandler handler = new ClientHandler(socket);
                threadPool.execute(handler);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //http://localhost:8088/
    public static void run(String[] args) {
        WebServerApplication server = new WebServerApplication();
        server.start();
    }
}
